﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Event_Planner.Models;
using System.Web.Security;
using Event_Planner.Filters;


namespace Event_Planner.Controllers
{

    public class EventosController : Controller
    {
        private Event_Planner.DataAccess.Eventos DataAccessEventos = new Event_Planner.DataAccess.Eventos();

        //
        // GET: /Default1/
        public ViewResult Index()
        {
            return View();
        }

        [OutputCache(Duration = int.MaxValue,VaryByCustom = "Cache.OutputCacheEventosPropios")]
        [ChildActionOnly]
        public ActionResult Eventos()
        {
            if (User.IsInRole("Administrador"))
                return PartialView(DataAccessEventos.db.Eventos.ToList());
            else
                return PartialView(DataAccessEventos.db.Usuarios.Find(User.Identity.Name).EventosCreados);
         } 


        //
        // GET: /Default1/Details/5

        public ActionResult Details(int id)
        {
            EventosModels Evento = DataAccessEventos.db.Eventos.Find(id);
            if (Evento == null)
                return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el evento ya no existe." });
            else
                return View(Evento);
        }


        //
        // GET: /Default1/Details/5
        [AllowAnonymous]
        public ActionResult DetailsPublico(int id)
        {
            EventosModels Evento = DataAccessEventos.db.Eventos.Find(id);
            if (Evento == null)
                return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el evento ya no existe." });
            else
                return View(Evento);
        }

        //
        // GET: /Default1/Create
        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Default1/Create

        [HttpPost]
        public ActionResult Create(EventosModels eventosmodels)
        {
            if (ModelState.IsValid)
            {
                if (eventosmodels.Descripcion == null) // Si descripcion vacia
                    {
                        eventosmodels.Descripcion = "Ninguna descripción para este evento.";
                    }
                if (eventosmodels.Lugar == null) // Si lugar vacia
                {
                    eventosmodels.Lugar = "No se ha definido el lugar todavia.";
                }

                Random rand = new Random();
                eventosmodels.ImagenDelEvento = "../../Content/Images/Evento-Generico" + rand.Next(1, 5).ToString() + ".jpg";

                eventosmodels.FechaInicio = DateTime.Now;

                DataAccessEventos.db.Usuarios.Find(User.Identity.Name).EventosCreados.Add(eventosmodels);

                DataAccessEventos.db.Eventos.Add(eventosmodels);
                DataAccessEventos.db.SaveChanges();

                Cache.ResetOutputCache();

                return RedirectToAction("Index");  
            }

            return View(eventosmodels);
        }
        
        //
        // GET: /Default1/Edit/5

        public ActionResult Edit(int id)
        {
            EventosModels Evento = DataAccessEventos.db.Eventos.Find(id);
            if (Evento == null)
                return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el evento ya no existe." });
            else
                return View(Evento);
        }

        //
        // POST: /Default1/Edit/5

        [HttpPost]
        public ActionResult Edit(EventosModels eventosmodels)
        {
            if (ModelState.IsValid)
            {
                EventosModels Evento = DataAccessEventos.db.Eventos.Find(eventosmodels.ID);
                if (Evento == null)
                    return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el evento ya no existe." });
                else
                {
                    DataAccessEventos.db.Entry(eventosmodels).State = EntityState.Modified;
                    DataAccessEventos.db.SaveChanges();
                    Cache.ResetOutputCache();
                    return RedirectToAction("Index");
                }
            }
            return View(eventosmodels);
        }

        //
        // GET: /Default1/Delete/5

        public ActionResult Delete(int id)
        {
            EventosModels Evento = DataAccessEventos.db.Eventos.Find(id);
            if (Evento == null)
                    return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el evento ya no existe." });
            else
                return View(Evento);
        }

        //
        // POST: /Default1/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            EventosModels Evento = DataAccessEventos.db.Eventos.Find(id);
            if (Evento == null)
                return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el evento ya no existe." });
            else
            {
                DataAccessEventos.EliminarEvento(DataAccessEventos.db.Eventos.Find(id));
                Cache.ResetOutputCache();
                return RedirectToAction("Index");
            }
        }



        //
        // GET: /Default1/Buscar
        [AllowAnonymous]
        public ActionResult Buscar()
        {
            return View();
        }


        //
        // POST: /Default1/Buscar

        [HttpPost]
        [AllowAnonymous]
        public ActionResult Buscar(string Nombre)
        {
            return View(DataAccessEventos.BuscarEventos(Nombre));
        }


        protected override void Dispose(bool disposing)
        {
            DataAccessEventos.db.Dispose();
            base.Dispose(disposing);
        }
    }
}